import random


class Card():
    def __init__(self, suite, face) -> None:
        self._suite = suite
        self._face = face

    @property
    def suite(self):
        return self._suite

    @property
    def face(self):
        return self._face

    def __str__(self) -> str:
        face_str = ''
        if self.face == 1:
            face_str = 'A'
        elif self.face == 11:
            face_str = 'J'
        elif self.face == 12:
            face_str = 'Q'
        elif self.face == 13:
            face_str = 'K'
        else:
            face_str = str(self.face)
        return '%s%s' % (self.suite, face_str)
    
    def __repr__(self) -> str:
        return self.__str__()
        
class Poker():
    def __init__(self) -> None:
        self._cards = [Card(suite,face) for suite in '♠♥♣♦' for face in range(1, 14)]
        self._curent = 0

        self.shuffle()

    @property
    def next(self):
        if self._hasNext:
            card = self._cards[self._curent]
            self._curent += 1
            return card

    @property
    def cards(self):
        return self._cards

    def _hasNext(self):
        return self._curent <= len(self._cards)
    
    def shuffle(self):
        return random.shuffle(self._cards)

class Player():
    def __init__(self, name) -> None:
        self._name = name
        self._cards_on_hand = []

    @property
    def cards_on_hand(self):
        return self._cards_on_hand

    def get_a_card(self, card):
        self._cards_on_hand.append(card)

    def __str__(self) -> str:
        return '%s' % (self._name)

    def __repr__(self) -> str:
        return self.__str__()

class Game():
    def __init__(self) -> None:
        self._poker = Poker()
        self._players = [Player(name) for name in ['张三','李四','王五','赵六']]
        self.main()

    def main(self):
        for _ in range(1, 14):
            for player in self._players:
                player.get_a_card(self._poker.next)
                print(player.cards_on_hand)
    
Game()